TMultiReadExclusiveWriteSynchronizer a deadlock
Otázka od: Milan Hora
8. 10. 2002 9:48
Ahoj,
pouziva nekdo pro synchronizaci pristupu k objektu z vice vlaken
TMultiReadExclusiveWriteSynchronizer? Pokud pouziji nasledujici konstrukci
tak dojde k deadlocku.
mrw: TMultiReadExclusiveWriteSynchronizer;
...
{ThreadA}
mrw.BeginRead;
try
// zde se pracuje se sdilenym objektem
//pokud se v tomto miste zacne vykonavat kod vlakna B, pak nasledne
dojde k deadlocku
mrw.BeginWrite;
try
// zde se pracuje se sdilenym objektem
finally
mrw.EndWrite;
end;
finally
mrw.EndRead;
end;
{ThreadB}
mrw.BeginWrite;
try
// zde se pracuje se sdilenym objektem
finally
mrw.EndWrite;
end;
Pokud nahradim TMultiReadExclusiveWriteSynchronizer objektem
TJclMultiReadExclusiveWrite z JCL, tak vse funguje bez problemu. Delam neco
spatne nebo muze jit o chybu Delphi? Pokud by mel nekdo zajem, tak mohu
poslat i jednoduchy projekt na demonstraci problemu.
D5, W2K
Milan
Odpovedá: Petr Vones
8. 10. 2002 17:52
From: "Milan Hora" <ivar@ivar.cz>
> Delam neco spatne nebo muze jit o chybu Delphi?
Tusim ze tam bylo prave nejake omezeni, ze jsi nemohl vnorovat Read a Write
nebo tak nejak.
> Pokud by mel nekdo zajem, tak mohu poslat i jednoduchy projekt na
> demonstraci problemu.
Dobre, zkusim to v D6 a 7.
Petr Vones